package cn.tdu.common.result;


import lombok.Data;

import java.io.Serializable;

/**
 * 这是统一返回结果类
 *
 * 1.Serializable 是 Java 的序列化接口，没有任何方法需要实现。在 JsonResult 类中实现 Serializable 接口的作用是：
 * 标记该类的对象可以被序列化，即可以转换为字节流进行存储或网络传输
 * 使得对象能够通过网络传输或保存到文件中
 * 在分布式系统中，对象需要在网络间传输时必须实现此接口
 * 这是 Java 中标准的序列化机制，用于支持对象的持久化和网络传输功能
 *
 * 2.JsonResult<T> 是一个泛型类定义，其中 <T> 是类型参数。它的作用是：
 * 创建一个通用的 JSON 响应封装类，可以承载任意类型的数据
 * T 代表实际使用时传入的具体数据类型
 * 例如可以创建 JsonResult<String>、JsonResult<User> 等不同类型的实例
 * 使响应类具有类型安全性和灵活性，避免类型转换问题
 * 这种设计常用于统一 RESTful API 的返回格式，可以包含状态码、消息和任意类型的数据内容
 * */
@Data
public class JsonResult<T> implements Serializable{
    private Integer state;
    //code 状态码 项目开发者约定的业务状态码 0成功 1参数错误 2 系统异常...
    private String message;
    //后端处理这个接口的时候 反馈的具体信息 比如 state==1 message=="age不是人的年龄 580岁"
    private T data;
    //前端经常需要查询后端的数据 可能是object可能是list 可能是map 可以将查询结果包装到这个data中
    //返回给前端 只需要说明数据结构就可以了

    /**
     * 创建响应结果对象，表示成功的方法
     * @return
     */
    public static JsonResult ok(String message){
        JsonResult jsonResult = new JsonResult();
        jsonResult.setState(200);//0表示成功
        jsonResult.setMessage(message);//状态码
        jsonResult.setData(null);// 数据
        return jsonResult;
    }

    /**
     * 创建响应结果对象，表示失败的方法
     * */
    public static JsonResult fail(String message){
        JsonResult jsonResult = new JsonResult();
        jsonResult.setState(500);
        jsonResult.setMessage(message);
        jsonResult.setData(null);
        return jsonResult;
    }
}
